package com.hsgene.user.persistence;

import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.OrderHelper;
import com.hsgene.user.condition.OperationAccountCondition;
import com.hsgene.user.domain.GeneticTestingOperationAccount;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author wangbing
 * @version 1.0, 2018/10/17
 */
@Repository
public interface OperationAccountRepository {

    /**
     * 根据用户名查询用户信息
     *
     * @param name 用户名
     * @return 用户信息
     */
    GeneticTestingOperationAccount findByName(@Param("name") String name);

    /**
     * 根据用户id查询用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    GeneticTestingOperationAccount findById(@Param("id") String id);

    /**
     * 根据用户电话号码查询用户信息
     *
     * @param phone 电话号码
     * @return 用户信息
     */
    GeneticTestingOperationAccount findByPhone(@Param("phone") String phone);

    /**
     * 根据真实姓名查询用户信息
     *
     * @param realName 真实姓名
     * @return 用户信息
     */
    GeneticTestingOperationAccount findByRealName(@Param("realName") String realName);

    /**
     * 保存用户信息
     *
     * @param account 用户信息
     */
    void save(@Param("account") GeneticTestingOperationAccount account);

    /**
     * 更新用户最近登录时间
     *
     * @param id                  用户id
     * @param latestLoginDateTime 最近登录时间
     */
    void updateLatestLoginDateTime(@Param("id") String id, @Param("latestLoginDateTime") Date latestLoginDateTime);

    /**
     * 修改用户信息
     *
     * @param account 用户信息
     */
    void update(@Param("account") GeneticTestingOperationAccount account);

    /**
     * 查询符合条件的用户数量
     *
     * @param condition 查询条件
     * @return 用户数量
     */
    int queryCount(@Param("condition") OperationAccountCondition condition);

    /**
     * 查询符合条件的用户列表
     *
     * @param condition   查询条件
     * @param orderHelper 排序参数
     * @param limitHelper 分页参数
     * @return 用户列表
     */
    List<GeneticTestingOperationAccount> queryAccounts(
            @Param("condition") OperationAccountCondition condition,
            @Param("orderHelper") OrderHelper orderHelper,
            @Param("limitHelper") LimitHelper limitHelper);
    /**
     *更新机构账户
     * @author FX
     * @date 2019/1/4 17:42
     * @param account
     * @return
     */
    void updateAgencyAccount(@Param("account") GeneticTestingOperationAccount account);
}
